package com.interview.rpc.serialize;

/**
 * 序列化接口
 * 
 * 序列化是将对象转换为字节流的过程，反序列化则是将字节流转换回对象
 * 在网络传输中，对象需要被序列化后才能通过网络发送
 */
public interface Serializer {
    
    /**
     * 序列化对象
     * @param obj 待序列化的对象
     * @return 字节数组
     */
    byte[] serialize(Object obj);
    
    /**
     * 反序列化字节数组
     * @param bytes 字节数组
     * @param clazz 目标类
     * @param <T> 泛型
     * @return 对象实例
     */
    <T> T deserialize(byte[] bytes, Class<T> clazz);
}